package org.andengine.extension.svg.util;

import android.graphics.Canvas;
import android.graphics.RectF;

import org.andengine.extension.svg.adt.SVGPaint;
import org.andengine.extension.svg.adt.SVGProperties;
import org.andengine.extension.svg.util.constants.ISVGConstants;


/**
 * (c) 2010 Nicolas Gramlich
 * (c) 2011 Zynga Inc.
 *
 * @author Nicolas Gramlich
 * @since 19:57:25 - 25.05.2011
 */
public class SVGEllipseParser implements ISVGConstants {
    // ===========================================================
    // Constants
    // ===========================================================

    // ===========================================================
    // Fields
    // ===========================================================

    // ===========================================================
    // Constructors
    // ===========================================================

    // ===========================================================
    // Getter & Setter
    // ===========================================================

    // ===========================================================
    // Methods for/from SuperClass/Interfaces
    // ===========================================================

    // ===========================================================
    // Methods
    // ===========================================================

    public static void parse(final SVGProperties pSVGProperties, final Canvas pCanvas, final SVGPaint pSVGPaint, final RectF pRect) {
        final Float centerX = pSVGProperties.getFloatAttribute(ATTRIBUTE_CENTER_X);
        final Float centerY = pSVGProperties.getFloatAttribute(ATTRIBUTE_CENTER_Y);
        final Float radiusX = pSVGProperties.getFloatAttribute(ATTRIBUTE_RADIUS_X);
        final Float radiusY = pSVGProperties.getFloatAttribute(ATTRIBUTE_RADIUS_Y);
        if (centerX != null && centerY != null && radiusX != null && radiusY != null) {
            pRect.set(centerX - radiusX, centerY - radiusY, centerX + radiusX, centerY + radiusY);

            final boolean fill = pSVGPaint.setFill(pSVGProperties);
            if (fill) {
                pCanvas.drawOval(pRect, pSVGPaint.getPaint());
            }

            final boolean stroke = pSVGPaint.setStroke(pSVGProperties);
            if (stroke) {
                pCanvas.drawOval(pRect, pSVGPaint.getPaint());
            }

            if (fill || stroke) {
                pSVGPaint.ensureComputedBoundsInclude(centerX - radiusX, centerY - radiusY);
                pSVGPaint.ensureComputedBoundsInclude(centerX + radiusX, centerY + radiusY);
            }
        }
    }

    // ===========================================================
    // Inner and Anonymous Classes
    // ===========================================================
}
